
#ifndef LEXIC_ANALISER_H_
#define LEXIC_ANALISER_H_


#include <iostream>
#include <vector>
#include <set>
#include <stack>
#include <algorithm>
#include <string>

#define LIM_MAX_IDENT 32
#define LIM_MIN_IDENT 2

using namespace std;

enum {
	IDENTIFICADOR = 1,
	NUMERO,
	STRING,
	BOOLEANO,
	ABRE_COLCHETE,
	FECHA_COLCHETE,
	ABRE_PARENTESE,
	FECHA_PARENTESE,
	ABRE_CHAVE,
	FECHA_CHAVE,
	PONTO_E_VIRGULA,
	VIRGULA,
	SOMA,
	SUBTRACAO,
	DIVISAO,
	MULTIPLICACAO,
	ATRIBUICAO,
	MENOR,
	MAIOR,
	MAIOR_IGUAL,
	MENOR_IGUAL,
	IGUALDADE,
	DIFERENCA,
	OU_BOOLEANO,
	E_BOOLEANO,
	CONCATENACAO,
	PALAVRA_RESERVADA,
	IDENTIFICADOR_DE_FUNCAO,
	CERQUILHA_FINAL,
	SIMBOLO_INVALIDO,
	DECLARACAO_FUNCAO,
	NOME_DE_TIPO
};

typedef struct {
	int chamada;
	string cadeia;
	string simbolo;
	int codigo;
	int linha;
} Chamada;

vector<Chamada> get_lexic_analiser();

#endif /* LEXIC_ANALISER_H_ */
